import { ref, computed } from 'vue'
import type { FormItemRows } from '@meetjs/element-plus-kit'
import { useDict } from '@/composables/useDict'
import { SYSTEM_DICT, ATHLETE_DICT, ORG_DICT } from '@/constants/dictKeys'
import { ManagementStatus, type AthleteQueryParams } from '@/api/athlete/types'

/**
 * 运动员列表页面表单配置
 */

// 使用 useDict hook 获取字典和组织级联数据
const { dicts, registerOrgOptions, orgCascadeOptions, trainOrgTypeLevelCascade } = useDict([
	SYSTEM_DICT.SEX, // 性别
	ATHLETE_DICT.PROJECT, // 注册项目
	ORG_DICT.SECOND_TYPE, // 在训单位类型
	SYSTEM_DICT.NATION // 民族
])

// 表单数据
export const formValue = ref<AthleteQueryParams>({})

// 在训单位类型选项
const trainOrgTypeOptions = trainOrgTypeLevelCascade as unknown as any

// 在训单位级别选项
export const trainOrgLevelOptions = ref([])

const canShowTrainOrgLevel = computed(() => {
	return formValue.value.trainOrgType !== undefined
})

// 注册状态选项
// 状态选项（是否完成首次注册和年度确认）
const registerStatusOptions = [
	{
		label: '待处理',
		value: ManagementStatus.PENDING
	},
	{
		label: '待确认注册',
		value: ManagementStatus.toRegister
	},
	{
		label: '已核准',
		value: ManagementStatus.APPROVED
	},
	{
		label: '已驳回',
		value: ManagementStatus.REJECTED
	},
	{
		label: '未提交',
		value: ManagementStatus.notSubmit
	},
	{
		label: '全部',
		value: ManagementStatus.ALL
	}
]

const statusOptions = [
	{
		label: '新增',
		value: 1
	},
	{
		label: '确认',
		value: 2
	}
]

// 是否退役选项
export const retiredOptions = [
	{
		label: '是',
		value: 1
	},
	{
		label: '否',
		value: 0
	}
]

// 是否采集指纹选项
export const collectFingerprintOptions = [
	{
		label: '是',
		value: 1
	},
	{
		label: '否',
		value: 0
	}
]

// 基础表单字段（默认显示）
// 搜索：姓名、含身份证号
// 筛选：性别、注册项目、注册单位、是否采集指纹、注册年份、首次注册年份
export const baseFormOptions = computed<FormItemRows[]>(() => [
	// 第一行：姓名 + 身份证号 + 性别 + 注册项目
	{
		type: 'input',
		label: '姓名',
		prop: 'athleteName',
		attrs: {
			placeholder: '请输入姓名',
			clearable: true
		}
	},
	{
		type: 'input',
		label: '身份证号',
		prop: 'idNumber',
		attrs: {
			placeholder: '请输入身份证号',
			clearable: true
		}
	},
	// 注册状态
	{
		type: 'select',
		label: '注册状态',
		prop: 'approvalStatus',
		options: registerStatusOptions,
		attrs: {
			clearable: true
		}
	},
	{
		type: 'select',
		label: '性别',
		prop: 'sex',
		options: dicts[SYSTEM_DICT.SEX] as unknown as any,
		attrs: {
			clearable: true
		}
	},
	{
		type: 'select',
		label: '注册项目',
		prop: 'registerProject',
		options: dicts[ATHLETE_DICT.PROJECT] as unknown as any,
		attrs: {
			clearable: true
		}
	},
	// 第二行：注册单位 + 是否采集指纹 + 注册年份 + 首次注册年份
	{
		type: 'select',
		label: '注册单位',
		prop: 'registerOrgId',
		options: registerOrgOptions as unknown as any
	},
	{
		type: 'select',
		label: '是否采集指纹',
		prop: 'verifyFingerprint',
		options: collectFingerprintOptions,
		attrs: {
			clearable: true
		}
	},
	{
		type: 'date-picker',
		label: '注册年份',
		prop: 'registerYear',
		attrs: {
			type: 'year',
			format: 'YYYY',
			valueFormat: 'YYYY',
			clearable: true
		}
	}
])

// 扩展表单字段（展开时显示）
// 在训单位类型、在训单位级别、注册单位所属市、注册单位所属区县、状态、协议开始时间、协议结束时间、是否退役
export const expandedFormOptions = computed<FormItemRows[]>(() => [
	{
		type: 'date-picker',
		label: '首次注册年份',
		prop: 'firstRegisterYear',
		attrs: {
			type: 'year',
			format: 'YYYY',
			valueFormat: 'YYYY',
			clearable: true
		}
	},
	{
		type: 'select',
		label: '在训单位类型',
		prop: 'trainOrgType',
		options: trainOrgTypeOptions,
		attrs: {
			clearable: true,
			onChange: () => {
				formValue.value.orgLevel = undefined
				trainOrgLevelOptions.value =
					trainOrgTypeLevelCascade.value.find(item => item.value === formValue.value.trainOrgType)?.children || []
			}
		}
	},
	{
		type: 'select',
		label: '在训单位级别',
		prop: 'orgLevel',
		options: trainOrgLevelOptions as unknown as any,
		attrs: {
			clearable: true,
			disabled: !canShowTrainOrgLevel.value
		}
	},
	{
		type: 'select',
		label: '注册单位所属市',
		prop: 'registerCity',
		options: [],
		attrs: {
			clearable: true
		}
	},
	// 第二行：注册单位所属区县 + 状态 + 协议开始时间 + 协议结束时间
	{
		type: 'select',
		label: '注册单位所属区县',
		prop: 'registerDistrict',
		options: [],
		attrs: {
			clearable: true
		}
	},
	{
		type: 'select',
		label: '状态',
		prop: 'status',
		options: statusOptions,
		attrs: {
			clearable: true
		}
	},
	{
		type: 'date-picker',
		label: '协议开始时间',
		prop: 'agreementStart',
		attrs: {
			type: 'date',
			placeholder: '请选择',
			style: 'width: 100%',
			valueFormat: 'YYYY-MM-DD',
			clearable: true
		}
	},
	{
		type: 'date-picker',
		label: '协议结束时间',
		prop: 'agreementEnd',
		attrs: {
			type: 'date',
			style: 'width: 100%',
			valueFormat: 'YYYY-MM-DD',
			clearable: true
		}
	},
	// 第三行：是否退役
	{
		type: 'select',
		label: '是否退役',
		prop: 'isRetire',
		options: retiredOptions,
		attrs: {
			clearable: true
		}
	}
])
